/*
* ============================================================================
*  Name        : example_001.h
*  Part of     : Finite state machine examples
*  Description : Class definition
*  Version     : %version: %
*  
*
* ============================================================================
*/
#if !defined(  __sm_example_001_h__ )
#define __sm_example_001_h__

#include <sea_statemachine>

// sea:: State Event Action namespace
using namespace sea;

/**
 * @file example_001.h
 * @brief
 *  Hello world example. Start point to create your own state machine
 *
 * @details
 * User class has to be derived from @ref sea::StateMachine \n
 * @code
 *  class UserClass : public StateMachine
 *  {
 *  public:
 *      UserClass( );
 *      ACT( UserClass, myAction );
 *  private:
 *      EVENT_INT( UserClass, myEvent );
 *  };
 *
 *  UserClass::UserClass( ) : 
 *      StateMachine( STATEMACHINE_NAME )
 *  {
 *  }
 *
 * @endcode
 *
 * Action function implementation \n
 * @code
 * ACT_IMPL( UserClass, myAction )
 * {
 * }
 * @endcode
 *
 * @ingroup StateMachineExamples
 *
 */
namespace sea_examples
{
    /**
     * @class HelloTheWorld_001
     * @brief \b Examples: Hello World example. Derive your class from sea::StateMachine class
     *
     * @ingroup StateMachineExamples
     */
    class HelloTheWorld_001 : public StateMachine
    {
    public:
        HelloTheWorld_001( );

        ACT( HelloTheWorld_001, say_hello_world );
    };

    void launch_example_001( );
}

#endif
